﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.ComponentModel;

namespace SetupLauncher.Domain.Entity
{
    /// <summary>
    /// Entidade que representa um produto
    /// </summary>
    [Serializable]
    public class Product
    {
        /// <summary>
        /// Nome do Produto
        /// </summary>
        [CategoryAttribute("Produto"), DescriptionAttribute("Nome do Produto.\nEx.: SINACOR")]
        public string Name { get; set; }

        /// <summary>
        /// Team Project
        /// </summary>
        [CategoryAttribute("Produto"), DescriptionAttribute("Team Project do Produto.\nEx: $/SINACOR")]
        public string TemProject { get; set; }

        /// <summary>
        /// Caminho do Manual do Setup
        /// </summary>
        [CategoryAttribute("Produto"), DescriptionAttribute("Caminho do Manual do Setup")]        
        public string ManualSetupPath { get; set; }


        /// <summary>
        /// Major Version do Produto
        /// </summary>
        [CategoryAttribute("Produto"), DescriptionAttribute("Major Version do Produto.\nEx: 3")]
        public int MajorVersion { get; set; }

        [CategoryAttribute("Produto"), DescriptionAttribute("Ambientes do Produto")]
        [System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]
        public List<Environment> Environments { get; set; }


        [CategoryAttribute("Produto"), DescriptionAttribute("Perfils para administração do produto")]
        [System.ComponentModel.TypeConverter(typeof(System.ComponentModel.ExpandableObjectConverter))]        
        public List<Entity.PerfilType> Perfils { get; set; }

        /// <summary>
        /// Adiciona um Ambiente no qual o produto faz parte
        /// </summary>
        /// <param name="environment"></param>
        public void AddEnvironment(Environment environment)
        {
            if (this.Environments == null)
                Environments = new List<Environment>();

            Environments.Add(environment);
        }

        /// <summary>
        /// Adiciona um Perfil ao Produto
        /// </summary>
        /// <param name="perfil"></param>
        public void AddPerfil(Entity.PerfilType perfil)
        {
            this.Perfils.Add(perfil);
        }

        public Product()
        {
            this.Environments = new List<Environment>();
            this.Perfils = new List<PerfilType>();
        }

        public override string ToString()
        {
            return this.Name;
        }
    }
}
